package service

import (
	"go.uber.org/zap"
	"gorm.io/gorm"
	"guns-go/global"
	"guns-go/model"
	"strconv"
	"time"
)

func SaveNoticeUser(noticeUser *model.SysNoticeUser, tx *gorm.DB) error {
	return tx.Create(noticeUser).Error
}

func GetSysNoticeUserListByNoticeId(noticeId int) (error, []*model.SysNoticeUser) {
	var sysNoticeUserSlice []*model.SysNoticeUser

	err := global.GVA_DB.Where("notice_id", noticeId).Find(&sysNoticeUserSlice).Error

	if err != nil {
		return err, nil
	}

	return nil, sysNoticeUserSlice
}

func AddSysNoticeUser(noticeId int, noticeUserIdList []string, noticeUserStatus int8, tx *gorm.DB) error {

	if len(noticeUserIdList) > 0 {

		for _, userId := range noticeUserIdList {
			sysNoticeUser := new(model.SysNoticeUser)

			sysNoticeUser.NoticeId = noticeId
			id, _ := strconv.Atoi(userId)
			sysNoticeUser.UserId = id
			sysNoticeUser.Status = noticeUserStatus

			err := SaveNoticeUser(sysNoticeUser, tx)

			if err != nil {
				return err
			}
		}
	}
	return nil
}

func EditSysNoticeUser(noticeId int, noticeUserIdList []string, noticeUserStatus int8, tx *gorm.DB) error {

	//先删除
	err := tx.Delete(model.SysNoticeUser{}, "notice_id =  ?", noticeId).Error

	if err != nil {
		return err
	}

	//再增加
	err = AddSysNoticeUser(noticeId, noticeUserIdList, noticeUserStatus, tx)

	if err != nil {
		return err
	}

	return nil
}

func Read(noticeId int, userId int, status int8) error {

	var sysNoticeUser *model.SysNoticeUser
	err := global.GVA_DB.Where("notice_id", noticeId).Where("user_id", userId).
		First(&sysNoticeUser).Error

	if err != nil {
		global.GVA_LOG.Info("query notice fail ", zap.String("err", err.Error()))
	}

	if sysNoticeUser != nil && sysNoticeUser.Id != 0 {
		return global.GVA_DB.Model(model.SysNoticeUser{}).Where("id = ?", sysNoticeUser.Id).
			Update("status", status).Update("read_time", time.Now()).Error
	}

	return nil
}
